/**
 * 文件名称:  IBaseDao.java
 * 文件序号:  序号
 * 内容描述:  文件简单描述，多行换行书写
 * 版权声明:  山东鸿蝶信息技术有限公司
 * 创建用户:  zhangkai
 * 创建日期:  2017/1/17 16:40
 * 修改用户:  无
 * 修改日期:  无
 * 修改说明:  无
 * 文件版本:  V1.0
 * 文件路径:
 */
package com.hongdee.base.basedao;

import java.util.List;
import java.util.Map;

/**
 * 名  称:IBaseDao
 * 类  型: interface
 * 描  述: 用一句话描述类的作用
 * 路  径:com.hongdee.base.basedao
 * 作  者:zhangkai
 * 日  期:2017/1/17 16:40
 */
public interface IBaseDao {
    /**
     * @param start  起始记录
     * @param limit  页面大小
     * @param sqlStr 查询 SQL
     * @param params 参数数组
     * @return Map
     * @throws Exception 基类异常
     * @desc 通过 JDBCDao分页查询
     */
    public Map page(String sqlStr, Object[] params, String start, String limit) throws Exception;

    /**
     * 方法名称: info
     * 方法描述: 通过 JdbcDao 使用SQL 、参数查询详情
     * 参数名称: String sql SQL 语句
     * 参数名称: Object... params 查询参数数组
     * 返回内容: 单条记录 Map
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public Map info(String sql, Object... params) throws Exception;

    /**
     * 方法名称: update
     * 方法描述: HibernateDao 通过 HQL 更新数据
     * 参数名称: String hql，Hibernate HQL 语句
     * 参数名称: Map params,HQL 占位符对应的参数集合
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */

    public void update(String hql, Map<String, Object> params) throws Exception;

    /**
     * 方法名称:saveOrUpdate
     * 方法描述: 保存或更新数据
     * 参数名称: Object obj @Entity 注解标释的实体实例
     * 返回内容: Object 保存或修改后的实例
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public Object saveOrUpdate(Object dict) throws Exception;

    /**
     * 方法名称: list
     * 方法描述: 根据 SQL 和参数，查询集合
     * 参数名称: String sqlStr sql 语句
     * 参数名称: Object... params 参数数组
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public List<Map<String, Object>> list(String sqlStr, Object... params) throws Exception;

    /**
     * 根据表名与关键字段查询 列表
     *
     * @param tableName
     * @param keyColumn
     * @param value
     * @return
     * @throws Exception
     */
    public List<Map<String, Object>> listByTableName(String tableName, String keyColumn, Object value) throws Exception;

    /**
     * @param tableName  SQL 语句
     * @param queryKey   查询字段
     * @param queryValue 查询字段值
     * @return Map
     * @throws Exception 异常基类
     * @desc 查询详情
     * @author 张国凯
     * @datatime 日期
     * @update_user
     * @update_time
     * @update_desc:
     */
    public Map info(String tableName, String queryKey, Object queryValue) throws Exception;

    /**
     * @param entityList @Service标注的实例集合
     * @return void
     * @throws Exception 异常基类
     * @desc 批量保存
     */
    public void saveOrUpdateList(List entityList) throws Exception;

    /**
     * 更新 SQL 语句
     *
     * @param sql
     * @param params
     * @return
     * @throws Exception
     */
    int executeSQL(String sql, Object... params) throws Exception;
}
